<template>
  <div>
    <!-- 事件前面加@ -->
    <!-- 钩子前面加: -->
    <upload-excel :before-upload="beforeUpload" :on-success="handleSuccess" />
  </div>
</template>

<script>
import { batchEmpAPI } from '@/api/employees'
import { parseTime } from '@/utils'
export default {
  name: 'Import',
  methods: {
    // 上传前的准备 --- 可以做一些文件的校验
    // 通过校验就往下继续，不通过校验就取消上传
    beforeUpload(file) {
      // 判断文件类型，如果是excel就往下继续，不是excel就取消上传
      // 判断文件名是否以.xls或者.xlsx结尾
      if (/\.(xls|xlsx)$/.test(file.name)) {
        return true
      }
      // 能来到这不为true，也就是不是excel文件
      this.$message.warning('请选择excel文件！')
      return false
    },

    // 如果解析出文件，这里有一个参数是一个对象
    // 对象里有两个属性：results、header，用大括号进行解构了
    // header代表表头，results代表内容
    async handleSuccess({ results, header }) {
      if (this.$route.query.type === 'employees') {
      /*
        在js导入excel文件，遇到时间数据，那都要进行转换
        因为excel的时间，跟js的时间不一样
        excel的时间的本质是从1900年1月1日到现在的天数
        js的时间的本质是从1970年1月1日到现在的毫秒数
        而js读取excel文件里的时间，就是读取成1900年1月1日到那个时间段的天数
        所以要转换
            先把天数转成毫秒数
            中间差了70年，要减70年
            天数要-1
                1900年1月1日0点到1900年1月2日0点，是1天
                1900年1月1日0点到1900年1月3日0但，是2天
                也就是日期的日比实际的天数多一天，所以到时候还要-1天得到实际的天数
      */

        // 声明了一个对象，对象的key是中文的，value是英文的
        const userRelations = {
          入职日期: 'timeOfEntry',
          手机号: 'mobile',
          姓名: 'username',
          转正日期: 'correctionTime',
          工号: 'workNumber',
          聘用形式: 'formOfEmployment'
        }

        // 因为results这个数组里的每个对象都要转换，就意味着也要遍历
        // 而且相当于产生一个新数组，只不过新数组的长度跟原来一样，但是属性会变成英文的
        const enResults = results.map(v => {
          const newObj = {}

          // 把新对象赋值成英文的对象，根据原来的v做转换
          // 给对象做遍历 --> 意思是：字典有多少个就做多少个转换
          for (const zhKey in userRelations) {
          // 取出中文所对应的英文
            const enKey = userRelations[zhKey]
            if (zhKey === '入职日期' || zhKey === '转正日期') {
            // 要转换后再赋值
            // 先取出天数
              const days = v[zhKey]
              // 转成毫秒数
              const timeStamp = (days - 1) * 24 * 60 * 60 * 1000
              // 根据毫秒数转成日期对象 --- 但此时多了70年
              const jsTime = new Date(timeStamp)
              // 但是这个时间戳得到的年份多了70年，所以还要减70年
              const year = jsTime.getFullYear()
              jsTime.setFullYear(year - 70)
              // 再转成YYYY-MM-DD的形式，用moment就是moment(jsTime).format('YYYY-MM-DD')
              newObj[enKey] = parseTime(jsTime, '{y}-{m}-{d}')
            } else {
              newObj[enKey] = v[zhKey]
            }
          }

          return newObj
        })

        // 读取出excel以后就上传到服务器做批量添加员工
        await batchEmpAPI(enResults)
        // 调回员工页面
        this.$message.success('批量导入成功')
        this.$router.push('/employees')
      }
    }
  }
}
</script>

<style>

</style>
